package d07_thread_threadpool;

import java.util.concurrent.*;

/**
 *目标:掌握线程池的创建方式
 * 使用线程池ExecutorService接口实现类，ThreadPoolExecutor
 */

public class Test {
    public static void main(String[] args) {
        ExecutorService pool = new ThreadPoolExecutor(
                3, //核心线程数
                5, //最大线程数
                10, //临时线程最大空闲时间(餐馆临时工最长没活时间)
                TimeUnit.SECONDS, //临时线程最大空闲时间单位(餐馆临时工最长没活时间单位)
                new ArrayBlockingQueue<>(4), //任务队列，没有来得及处理的任务进队等待处理(餐馆外的候客区，等待位置
                Executors.defaultThreadFactory(), //线程工厂，创建线程(餐馆的HR，负责管理员工）
                new ThreadPoolExecutor.AbortPolicy() //拒绝策略，任务队列已满，且没有空闲线程，无法处理任务，拒绝处理(餐馆饱和，拒绝顾客
        );
    }

    //注意事项1:什么时候创建临时线程?
    //核心线程都在忙，任务队列也满了，再来任务，则创建临时线程处理

    //注意事项2:什么时候拒绝?
    // 核心线程都在忙，任务队列也满了，临时工都在忙，再来任务，使用拒绝策略进行处理
}
